from flask import g, abort, request, jsonify, current_app

from ihome.models import User
from ihome.utils.common import user_login_data, upload_file
from ihome.utils.constants import QINIU_DOMIN_PREFIX
from ihome.utils.response_code import RET, error_map
from . import api_blu


@api_blu.route('/user/avatar' ,methods=['POST'])
@user_login_data
def user():
    user = g.user
    if not user:  # 用户未登录, 拒绝访问
        return abort(403)

    # POST 提交头像
    avatar_file = request.files.get("avatar")
    if not avatar_file:
        return jsonify(errno=RET.PARAMERR, errmsg="头像上传出错")

    # 一般开发中, 会将静态文件分离到文件服务器, 以便提高性能
    # 读取文件的二进制格式数据
    try:
        img_bytes = avatar_file.read()
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.PARAMERR, errmsg=error_map[RET.PARAMERR])

    # 使用七牛云工具进行文件上传
    try:
        file_name = upload_file(img_bytes)
    except BaseException as e:
        current_app.logger.error(e)
        return jsonify(errno=RET.THIRDERR, errmsg=error_map[RET.THIRDERR])

    # 修改用户的头像链接
    user_avatar_url = QINIU_DOMIN_PREFIX + file_name

    data={
        "avatar_url":user_avatar_url
    }


    # 返回json  为了让前端可以立即修改用户的头像, 需要返回头像链接
    return jsonify(errno=RET.OK, errmsg=error_map[RET.OK],data=data)

